//
//  Student.m
//  MVVM+RAC
//
//  Created by bopeng on 16/6/14.
//  Copyright © 2016年 Scott. All rights reserved.
//

#import "Student.h"
#import <objc/runtime.h>


@implementation Student

// void(*)()
// 默认方法都有两个隐式参数，
void studyStudent(id self, SEL sel){
    NSLog(@"%@--%@",self,NSStringFromSelector(sel));
}

// 当一个对象调用未实现的方法，会调用该方法处理，并且会把对应的方法列表传进来，我们可以在这个方法里判断，未实现的方法是不是我们想要动态添加的方法。
+ (BOOL)resolveInstanceMethod:(SEL)sel {
    
    if (sel == @selector(study)) {
        // 第一个参数：给哪个类添加方法
        // 第二个参数：添加方法的方法编号
        // 第三个参数：添加方法的函数实现（函数地址）
        // 第四个参数：函数的类型，(返回值+参数类型) v:void @:对象->self :表示SEL->_cmd
        class_addMethod(self, @selector(study), (IMP)studyStudent, "v@:");
        
        return YES;
    }
    
    return [super resolveInstanceMethod:sel];
}

@end
